package com.sfx.other;

class A {
    public A foo() {
        return this;
    }
}

class B extends A {

    public A foo() {
        return this;
    }
}

class C extends B {

//    @Override
//    public B foo() {
//        return this;
//    }

    // 3.1 父类被重写的方法的返回值类型是void，则子类重写的方法的返回值类型只能是void
    // 3.2 父类被重写的方法的返回值类型是A类型，则子类重写的方法的返回值类型是A类或A类的子类
    // 方法重写的时候,方法名字相同,返回值必须是子类或者与父类相同
//    public void foo(int x){}

    // 方法重写要求参数列表必须相同
    // 子类重写的方法的方法名和形参列表与父类中的被重写的方法的方法名和形参列表相同
    // 这里就是方法重载了
    public void foo(int x){}

//    public int foo(){return 1;}
//
//    public A foo(B b){return b;}
//
//    public A foo(){return A;}


    //    // 方法名相同,返回值要比父类的小
//    public B foo() {
//        return this;
//    }
//    // public A foo(B b){return b;}
//
//    public A foo() {
//        return new A();
//    }
//
//    public int foo() {
//        return 1;
//    }
}